#include"USvgIconEngineSimple.h"
#include"IconFileTools.h"
#include<QDebug>


/*
 * 简要版本的SvgIconEngine：
 * 直接用QSvgRender渲染svg图片，任何时候都采用直接渲染的方法
 * 缺点：效率低
*/


static bool isSvgFile(const QString& filepath)
{
    return IconFileType::svg == probeIconMimeType(filepath);
}

class USvgIconEngineSimplePrivate : public QSharedData
{
public:
    //缓存的容器
    //可以用 图片路径字符串作为key（或者进一步计算为hash值）
};


USvgIconEngineSimple::USvgIconEngineSimple()
//    :d_ptr(new USvgIconEngineSimplePrivate)
{
    qDebug() << "USvgIconEngineSimple构造";
}

USvgIconEngineSimple::~USvgIconEngineSimple()
{
}

//USvgIconEngineSimple::USvgIconEngineSimple(const USvgIconEngineSimple& other)
//{

//}


void USvgIconEngineSimple::addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state)
{
    if(fileName.isEmpty() || !isSvgFile(fileName))//非svg类型，不处理
    {
        qDebug() << "[USvgIconEngine::addFile]: 传入文件空,或者检测为非svg类型文件";
        return ;
    }
    m_svgFile.clear();
    m_svgFile = fileName;
}

void USvgIconEngineSimple::addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state)
{

}



void USvgIconEngineSimple::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state)
{
    qDebug() << "void USvgIconEngineSimple::paint";
    if(m_renderer.isValid() && !m_svgFile.isEmpty()){
        m_renderer.load(m_svgFile);
        m_renderer.render(painter,rect);
    }
}

//参数：所需的size、mode，state
QPixmap USvgIconEngineSimple::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)
{
    return QPixmap();
}


/*
    返回 Engine 针对  所请求的大小、模式、状态，而提供的，实际的图标的size
    默认实现返回给定的大小。
*/
QSize USvgIconEngineSimple::actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state)
{
    return QSize();
}





QString USvgIconEngineSimple::key() const {
    return QString();
}
QIconEngine* USvgIconEngineSimple::clone() const
{
    return nullptr;
}
bool USvgIconEngineSimple::read(QDataStream &in) {
    return true;
}
bool USvgIconEngineSimple::write(QDataStream &out) const {
    return true;
}
void USvgIconEngineSimple::virtual_hook(int id, void *data){

}


